package com.master.rl;

import java.sql.ResultSet;
import java.text.DecimalFormat;

import com.master.root.FormataDataBean;
import com.master.util.Data;
import com.master.util.Excecoes;
import com.master.util.Extenso;
import com.master.util.JavaUtil;
import com.master.util.Mensagens;
import com.master.util.ed.Parametro_FixoED;
import com.master.util.rl.GeraPDF;
import com.master.util.rl.GeraXML;
import com.master.ed.Fatura_CompromissoED;
import com.master.util.bd.Transacao;
import com.master.util.bd.ExecutaSQL;
import java.sql.SQLException;

public class Fatura_CompromissoRL extends Transacao{
 
    FormataDataBean dataFormatada = new FormataDataBean();
    private ExecutaSQL executasql;

    public Fatura_CompromissoRL() {
    }

    public byte[] imprime_Fatura_Compromisso(ResultSet res, Fatura_CompromissoED ed) throws Excecoes {

        int iTotalPorPagamento = 0;
        int iTotalGeral = 0;
        double vl_Compromisso = 0;
        double vl_Compromisso_geral = 0;

        try {

            GeraXML x = new GeraXML();
            DecimalFormat dec = new DecimalFormat("###,###,##0.00");
            x.insereDTD();

            x.insereTagXML("RELATORIO", x.ABRE);

            x.insereTagXML("ID_RELATORIO", x.ABRE);

            x.insereElementoXML("CODIGO", "cpgF25");
            x.insereElementoXML("TITULO", "Fatura Compromisso ");
            x.insereTagXML("ID_RELATORIO", x.FECHA);
            x.insereTagXML("PROCESSAMENTO", x.ABRE);

            String data = Data.getDataDMY();
            String hora = Data.getHoraHM();

            x.insereElementoXML("DATA", data);
            x.insereElementoXML("HORARIO", hora);
            x.insereTagXML("PROCESSAMENTO", x.FECHA);
            x.insereTagXML("LISTA_COMPROMISSO", x.ABRE);
            Extenso extenso = new Extenso();

            String oid_Fatura_Compromisso = null;
            String oid_Fatura_Compromisso_Aux = null;
            ResultSet resLocal = null;
            boolean bPrimVez = true;

            while (res.next()) {
              this.inicioTransacao ();
              this.executasql = this.sql;
                // primeira volta no loop
                if (bPrimVez == true) {
                    bPrimVez = false;
                    oid_Fatura_Compromisso = res.getString("oid_Fatura_Compromisso");
                    oid_Fatura_Compromisso_Aux = new String(oid_Fatura_Compromisso);
                    x.insereTagXML("COMPROMISSO", x.ABRE);
                    x.insereElementoXML("NR_LOTE", res.getString("oid_Fatura_Compromisso"));
                    x.insereElementoXML("NR_DOCUMENTO", res.getString("nr_documento_lote"));
                    x.insereElementoXML("DT_EMISSAO", res.getString("dt_emissao") == null ? "" : dataFormatada.getDT_FormataData(res.getString("dt_emissao")));
                    x.insereElementoXML("VALOR_LOTE", res.getString("vl_Fatura_Compromisso") == null ? "" : dec.format(res.getDouble("vl_Fatura_Compromisso")));
                    x.insereElementoXML("FAVORECIDO", res.getString("nm_razao_social") == null ? "" : res.getString("nm_razao_social"));

                    String Dt_Programada = Data.getDataDMY ();
                    String mes = Dt_Programada.substring (3 , 5);
                    int mes_ano = new Integer (mes).intValue ();
                    switch (mes_ano) {
                      case 1:
                        mes = "JANEIRO";
                        break;
                      case 2:
                        mes = "FEVEREIRO";
                        break;
                      case 3:
                        mes = "MARCO";
                        break;
                      case 4:
                        mes = "ABRIL";
                        break;
                      case 5:
                        mes = "MAIO";
                        break;
                      case 6:
                        mes = "JUNHO";
                        break;
                      case 7:
                        mes = "JULHO";
                        break;
                      case 8:
                        mes = "AGOSTO";
                        break;
                      case 9:
                        mes = "SETEMBRO";
                        break;
                      case 10:
                        mes = "OUTUBRO";
                        break;
                      case 11:
                        mes = "NOVEMBRO";
                        break;
                      case 12:
                        mes = "DEZEMBRO";
                        break;
                    }
                    x.insereElementoXML ("DIA" , Dt_Programada.substring (0 , 2));
                    x.insereElementoXML ("MES" , mes);
                    x.insereElementoXML ("ANO" , Dt_Programada.substring (6 , 10));
                  
                    String sqlBusca = "Select " +
                        " Pessoas.NR_CNPJ_CPF, " +
                        " Pessoas.NM_RAZAO_SOCIAL, " +
                        " Pessoas.NM_ENDERECO, " +
                        " Pessoas.NR_CEP, " +
                        " Pessoas.NM_BAIRRO, " +
                        " Cidades.NM_CIDADE, " +
                        " Estados.CD_ESTADO " +
                        " FROM " +
                        " Unidades, Pessoas, " +
                        " Cidades,  " +
                        " Regioes_Estados, " +
                        " Estados " +
                        " WHERE Unidades.OID_PESSOA = Pessoas.OID_PESSOA " +
                        " AND Pessoas.OID_CIDADE = Cidades.OID_CIDADE " +
                        " AND Cidades.OID_REGIAO_ESTADO = Regioes_Estados.OID_REGIAO_ESTADO " +
                        " AND Regioes_Estados.OID_ESTADO = Estados.OID_ESTADO " +
                        " AND Unidades.oid_Unidade = '" + res.getString ("oid_Unidade") + "'";
                  
                    resLocal = sql.executarConsulta (sqlBusca);
                    try {
                      while (resLocal.next ()) {
                        x.insereElementoXML ("EMPRESA" , resLocal.getString ("NM_RAZAO_SOCIAL") == null ? "" : resLocal.getString ("NM_RAZAO_SOCIAL"));
                        x.insereElementoXML ("ENDERECO" , resLocal.getString ("NM_ENDERECO") == null ? "" : resLocal.getString ("NM_ENDERECO"));
                        x.insereElementoXML ("CIDADE" , resLocal.getString ("NM_CIDADE") == null ? "" : resLocal.getString ("NM_CIDADE"));
                        x.insereElementoXML ("CNPJ" , resLocal.getString ("NR_CNPJ_CPF") == null ? "" : resLocal.getString ("NR_CNPJ_CPF"));
                      }
                    }
                    finally {
                      try {
                        resLocal.close ();
                      }
                      catch (SQLException e) {
                        e.printStackTrace ();
                      }
                      try {
                        resLocal.getStatement ().close ();
                      }
                      catch (SQLException e) {
                        e.printStackTrace ();
                      }
                    }

                    if (res.getString ("vl_Fatura_Compromisso") != null && !res.getString ("vl_Fatura_Compromisso").equals ("0")) {
                      Double valor = new Double (res.getString ("vl_Fatura_Compromisso"));
                      String valorExtenso = extenso.getExtenso (valor.doubleValue () , 'M');
                      x.insereElementoXML ("QUANTIA" , valorExtenso.toUpperCase ());
                    }
                    else {
                      x.insereElementoXML ("QUANTIA" , "");
                    }


                    x.insereTagXML("LISTA_TITULO", x.ABRE);
                }
                if (iTotalPorPagamento>40){
                  oid_Fatura_Compromisso_Aux="";
                }


                if (!(oid_Fatura_Compromisso_Aux.equals(res.getString("oid_Fatura_Compromisso")))) {
                    oid_Fatura_Compromisso_Aux = res.getString("oid_Fatura_Compromisso");
                    x.insereElementoXML("TOTAL", Integer.toString(iTotalPorPagamento));
                    x.insereElementoXML("TOTAL_VALOR_SALDO", dec.format(vl_Compromisso));
                    x.insereTagXML("LISTA_TITULO", x.FECHA);
                    x.insereTagXML("COMPROMISSO", x.FECHA);
                    iTotalPorPagamento = 0;
                    vl_Compromisso = 0;
                    x.insereTagXML("COMPROMISSO", x.ABRE);
                    x.insereElementoXML("NR_CHEQUE", res.getString("nr_documento_lote"));
                    x.insereElementoXML("DT_EMISSAO", res.getString("dt_emissao") == null ? "" : dataFormatada.getDT_FormataData(res.getString("dt_emissao")));
                    x.insereElementoXML("VALOR_LOTE", res.getString("vl_Fatura_Compromisso") == null ? "" : dec.format(res.getDouble("vl_Fatura_Compromisso")));
                    String situacao = "";
                    x.insereElementoXML("SITUACAO", situacao);
                    x.insereElementoXML("FAVORECIDO", res.getString("nm_razao_social") == null ? "" : res.getString("nm_razao_social"));
                  x.insereTagXML("LISTA_TITULO", x.ABRE);
                }
                x.insereTagXML("TITULO", x.ABRE);
                x.insereElementoXML("NRO", res.getString("nr_documento_compromisso") == null ? "" : res.getString("nr_documento_compromisso"));
                x.insereElementoXML("NRO_COMPROMISSO", res.getString("nr_compromisso") == null ? "" : res.getString("nr_compromisso"));
                x.insereElementoXML("PARCELA", res.getString("nr_parcela") == null ? "" : res.getString("nr_parcela"));
                x.insereElementoXML("FORNECEDOR", (res.getString("nm_razao_social_compromisso") + "                                    ").substring(0, 28));
                x.insereElementoXML("VALOR_PAGO", res.getString("vl_Compromisso") == null ? "" : dec.format(res.getDouble("vl_Compromisso")));
                vl_Compromisso = vl_Compromisso + res.getDouble("vl_Compromisso");
                vl_Compromisso_geral = vl_Compromisso_geral + res.getDouble("vl_Compromisso");


                x.insereTagXML("TITULO", x.FECHA);

                iTotalPorPagamento++;
                iTotalGeral++;

              this.fimTransacao(true);

            }



            x.insereElementoXML("TOTAL", Integer.toString(iTotalPorPagamento));
            x.insereElementoXML("TOTAL_VALOR_SALDO", dec.format(vl_Compromisso));
            x.insereTagXML("LISTA_TITULO", x.FECHA);

            x.insereElementoXML("TOTAL", Integer.toString(iTotalGeral));
            x.insereElementoXML("TOTAL_VALOR_PREVISTO", "");
            x.insereElementoXML("TOTAL_VALOR_PAGO", "");
            x.insereElementoXML("TOTAL_VALOR_SALDO", dec.format(vl_Compromisso_geral));

            x.insereTagXML("COMPROMISSO", x.FECHA);
            x.insereTagXML("LISTA_COMPROMISSO", x.FECHA);
            x.insereElementoXML("TOTAL", Integer.toString(iTotalGeral));
            x.insereTagXML("RELATORIO", x.FECHA);


            // // (x.retornaXML().toString());

            GeraPDF geraPDF = new GeraPDF();
            geraPDF.setXML(x.retornaXML());

            String CaminhoXSL = System.getProperty("CaminhoXSL");
            geraPDF.setXSL (new StringBuffer (CaminhoXSL + "Protocolo_Fatura_Compromisso.xsl"));

            geraPDF.parseToBytes();

            return geraPDF.getArrayPDF();

        } catch (Exception exc) {
            throw new Excecoes(exc.getMessage(), exc, this.getClass().getName(), "imprime_Fatura_Compromisso()");
        }
    }
}
